// app.js是专门用来构建路由还有中间件的
// 服务器启动和配置行为不在这里进行
// 导入了一些模块
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var logger = require('morgan');
// 导入session
var session = require("express-session")
var cookieParser = require('cookie-parser');

// 导入数据
// const mgdb = require("./db/mgdb.js");

// 导入外部路由
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

// 构建express服务器
var app = express();

//  设置模板引擎的位置，和模板引擎的类型
// 设置页面文件都放在views文件夹中，使用的模板引擎ejs
// 设置的是视图文件的位置 views文件夹
app.set('views', path.join(__dirname, 'views'));
// 视图文件的类型为 ejs
app.set('view engine', 'ejs');

//设置日志文件，设置配置为dev
app.use(logger('dev'));
// 配置相关中间件
app.use(express.json()); //json处理的中间件
//url类型的中间件处理
app.use(express.urlencoded({
	extended: false
}));
//cookie的处理
app.use(cookieParser());
// 使用express的session中间件
// 设置session的相关配置
const sessionMiddleware = session({
	secret: "1FOF13YR1OF",
	resave: false,
	saveUninitialized: true,
	cookie: {
		maxAge: 1000 * 60 * 60 * 24,
		secure: false,
	}
});
app.use(sessionMiddleware);

// 静态文件夹位置
app.use(express.static(path.join(__dirname, 'public')));


// 功能页面
app.use('/', indexRouter);
// 用户相关的页面
app.use('/users', usersRouter);


// 错误级中间件
// 当以上路由都没有匹配项的时候，到达该中间件
// 返回404错误
app.use(function(req, res, next) {
	next(createError(404));
});

// 服务器发生错误的时候，调用的中间件
app.use(function(err, req, res, next) {
	// set locals, only providing error in development
	res.locals.message = err.message;
	res.locals.error = req.app.get('env') === 'development' ? err : {};

	// render the error page
	res.status(err.status || 500);
	res.render('error');
});

// 导出了express服务器对象
module.exports = app;